﻿/******************************************************************************

                  版权所有 (C), 2001-2016, 华为技术有限公司

 ******************************************************************************
  文 件 名   : hw_app_metadata.h
  版 本 号   : 初稿
  作    者   : 陈 赟/chenyun c00193875
  生成日期   : 2016年08月04日 17:10:37
  最近修改   :
  功能描述   : 智能元数据TLV格式定义
  函数列表   :
  修改历史   :
  1.日    期   : 2016年08月04日 17:10:37
    作    者   : 陈 赟/chenyun c00193875
    修改内容   : 创建文件
  2.date       : 2020-02-20 
    Author     : lupengfei/l00427296
  3.date       : 2021-12-20 
    Author     : sunbinbin/s30001871
    Description: del useless type
******************************************************************************/
#ifndef __HW_APP_METADATA_H__
#define __HW_APP_METADATA_H__

// #include "generictype.h"
#include "sdc.h"

#define MAX_POINT_NUM (10)

// 元数据采用三层TLV结构嵌套，
// 具体设计参见《IPC V200R003C00 智能元数据结构设计说明书》

// 第一层元数据TYPE
typedef enum LAYER_ONE_TYPE
{
    METADATA_TYPE = 0x4154454D, // 'M''E''T''A' 小端序
} LAYER_ONE_TYPE_E;

// 第二层元数据TYPE
typedef enum LAYER_TWO_TYPE
{
    COMMON  = 0x00000001, // 通用
    TARGET  = 0x00000002, // 目标(车、人、目标等等) 
    RULE    = 0x00000003, // 规则(设定的规则框)
    TALARM  = 0x00000004, // 智能报警
    TRECORD = 0x00000005,  // 智能触发录像
    TRAFFIC_LIGHT = 0x00000006 //信号灯状态 
} LAYER_TWO_TYPE_E;

/***** 元数据类型描述信息
第三层元数据TYPE
  类别 保留 类型    
0x 00  0000 00

高2位表示数据类别
0x01 BOOL
0x02 CHAR
0x03 UCHAR
0x04 INT16
0x05 UINT16
0x06 INT32
0x07 UINT32
0x08 INT64
0x09 UINT64
0x0A 二进制序列
0x0B 矩形 见结构体META_RECT_S
0x0C 点 见结构体META_POINT_S
0x0D 线 见结构体META_LINE_S
0x0E 多边形 见结构体META_POLYGON_S
0x0F 颜色 见结构体META_COLOR_S
0x10 目标整体属性 HUMAN_ATTRIBUTES 不建议使用 建议使用单属性 以0X07000300开始
0x11 目标属性 FACE_ATTRIBUTES  不建议使用 建议使用单属性 以0X07000200开始
0x12 目标信息（数据库中信息）
0x13 骑行人属性 RIDERMAN_ATTRIBUTES 不建议使用 建议使用单属性 以0X07000400开始

0x20 字符串STRING128 最长128
0x21 字符串对STRING128STRING128 最长128*2;'\0' 作为字符串结束标识 etc: 'glass\0yes\0'
检索到第一个'\0'为key 第二个为value

0x22 UUID(UINT128) 相机唯一值

中间4位暂时保留
低2位表示具体类型
元数据类型描述信息 ****/

typedef enum LAYER_THREE_TYPE {
    PTS                 = 0x09000001, // 时间戳
    ITGT_TYPE           = 0x07000011, // 智能类型
    IMG_WIDTH           = 0x07000100, // 处理图片宽
    IMG_HEIGHT          = 0x07000101, // 处理图片高
    RULE_MASK           = 0x09000007, // 规则掩码

    FACE_SCORE          = 0x04000013, // 目标置信度
    FACE_ANGLE          = 0x04000014, // 目标角度
    FACE_ID             = 0x07000016, // 目标ID
    FACE_PANOPIC_SIZE   = 0x07000018, // 目标全景图片大小
    FACE_FACEPIC_SIZE   = 0x07000019, // 目标抠图图片大小
    FACE_PIC_TIME       = 0x08000015, // 目标抠图产生时间
    FACE_PIC_TZONE      = 0x08000020, // 目标抠图设备时区(单位ms 东区为+ 西区为-)
    HUMAN_FEATURE       = 0x10000002, // 目标整体属性
    FACE_FEATURE		= 0x11000003, // 目标属性
    RIDERMAN_FEATURE    = 0x13000001, // 骑行人属性
    PANORAMA_PIC        = 0x0A00000A, // 全景图片
    THERMAL_PIC         = 0x0A00000D, // 热成像全景图
    FACE_PIC            = 0x0A000012, // 目标抠图
	FACE_PIC_KPS		= 0x07000012, // 目标抠图kps质量过滤标志位
    HUMAN_PIC           = 0x0A000013, // 目标整体抠图
	HUMAN_PIC_KPS		= 0x07000013, // 目标整体抠图kps质量过滤标志位
	HUMAN_PIC_ROI       = 0x0B000017, // 目标整体抠图中的目标整体目标框
    FACE_PANORAMA       = 0x0A000017, // 目标全景
    FACE_PIC_POSITION   = 0x0B000011, // 目标抠图小框位置
    FACE_POS            = 0x0B000012, // 目标位置(实时位置框)
    HUMAN_RECT          = 0x0B000013, // 目标整体位置(实时位置框)
    HUMAN_RECT_POSITION = 0x0B000014, // 目标整体抠图小框位置
    SHOULDER_RECT       = 0x0B000018, // 头肩位置
    SHOULDER_NUM        = 0x06000001, // 头肩个数
    QUEUE_TIME          = 0x06000002, // 排队时长
    FACE_MATCH          = 0x0A000014, // 目标数据库中匹配图片
    FACELIB_RECORDID    = 0x07000017, // 名单库中的目标ID，用来维持特征 record的一致性
    FACE_MATCHRATE      = 0x07000020, // 目标匹配率
    FACE_INFO           = 0x12000001, // 目标信息,对应数据库中信息
    FACE_LIB_TYPE       = 0x07000022, // 名单库类型
    FACE_LIB_NAME       = 0x0A000015, // 名单库名字
    TARGET_TYPE         = 0x07000023, // target类型，所有智能的业务类型
    FACE_LIB_ID         = 0x07000024, // 名单库ID
    MMC_FACE_COMPARE_NUM_MAX = 0x07000025, //多机协同算法参数- 目标比对数据
    MMC_FACE_WARNING_RECALL_RATE_MAX = 0x07000026, //多机协同算法参数- 目标上报告警的召回率
    MMC_FACE_WARNING_RECALL_RATE_MIN = 0x07000027, //多机协同算法参数- 目标预警率的下限值

    OBJ_ID              = 0x07000021, // 目标ID
    GLOBAL_OBJID        = 0x09000082, // 智能目标全局ID(目标 目标整体 机动车 非机动车 ITS 微卡) 
    OBJ_STATUS          = 0x06000022, // 目标状态
    OBJ_POS             = 0x0B000023, // 目标位置
    OBJ_TYPE            = 0x06000024, // 目标类型
    OBJ_SPEED           = 0x0C000025, // 目标速度
    OBJ_UPHALF_COLOR    = 0x0F000026, // 目标上半部颜色
    OBJ_DOWNHALF_COLOR  = 0x0F000027, // 目标下半部颜色
    RULE_TYPE           = 0x07000031, // 规则类型
    RULE_LINE_POS       = 0x0D000032, // 规则线位置
    RULE_LINE_DIR       = 0x07000033, // 规则线方向
    RULE_AREA_POS       = 0x0E000034, // 规则框位置
    OBJ_POS_R           = 0x0B000035, // 目标位置(相对位置)
    OBJ_SPEED_R         = 0x0C000036, // 目标速度(相对位置)
    RULE_LINE_POS_R     = 0x0D000037, // 规则线位置(相对位置)
    RULE_AREA_POS_R     = 0x0E000038, // 规则框位置(相对位置)
	HUMAN_TIME_START    = 0x09000050,    // 开始计数时间

    LANE_ID             = 0x07000002, // 车道号
    LAND_DIR            = 0x07000102, // 车道方向
    PASS_COUNTER        = 0x09000079, // 过车计数

    VEHICLE_TYPE        = 0x07000003, // 车辆类型
    VEHICLE_COLOR       = 0x07000004, // 车辆颜色
    VEHICLE_DIRECTION   = 0x07000005, // 车辆行驶方向

    VEHICLE_POS         = 0x0B000005, // 车辆位置(万分比)
    VEHICLE_POS_ABS     = 0x0B000020, // 车辆位置绝对坐标              新增
    VEHICLE_POS_COM     = 0x0B000021, // 车辆位置相对坐标万分比    新增

    PLATE_TYPE          = 0x07000006, // 车牌类型

    PLATE_CHAR          = 0x0A000008, // 车牌字符
    PLATE_PIC           = 0x0A000009, // 车牌抠图
    PLATE_BMP_BIT       = 0x0A00000B, // 车牌BMP图
    PLATE_BMP_BIT_SIZE  = 0x07000408, // 车牌BMP图大小        
    PLATE_BMP_BYTE      = 0x0A00000C, // 车牌BMP图    
    PLATE_BMP_BYTE_SIZE = 0x07000407, // 车牌BMP图大小            
    PLATE_CONFIDENCE    = 0x07000061, // 车牌置信度
    PLATE_COLOR         = 0x07000062, // 车牌颜色
    PLATE_CHAR_POS      = 0x0B000063, // 车牌字符位置
    PLATE_FACE_POS      = 0x0B000064, // 车脸位置
    PLATE_MOVE_DIR      = 0x07000065, // 车牌运动方向
    PLATE_SNAPSHOT_TYPE = 0x07000066, // 车牌抓拍类型
    VEHICLE_PIC         = 0x0A000067, // 车辆特写图
    FACE_FEATURE_PIC    = 0x0A000068, // 行人闯红灯目标特写图
    VEHICLE_FACE1       = 0x0A000069, // 第一张车内目标图
    VEHICLE_FACE2       = 0x0A00006A, // 第二张车内目标图
    PIC_SNAPSHOT_TIMEMS = 0x09000003, // 抓拍时间(单位ms)
    PIC_SNAPSHOT_TIMEMS1 = 0x0900000B, // 第一张图抓拍时间(单位ms)
    PIC_SNAPSHOT_TIMEMS2 = 0x0900000C, // 第二张图抓拍时间(单位ms)
    PIC_SNAPSHOT_TIMEMS3 = 0x0900000D, // 第三张图抓拍时间(单位ms)
    PIC_SNAPSHOT_TIMEMS4 = 0x0900000E, // 第四张图抓拍时间(单位ms)
    PIC_SNAPSHOT_TIME   = 0x07000068, // 抓拍时间
    PIC_SNAPSHOT_TIME_US = 0x09000005,//抓拍时间(单位us)
    PIC_SNAPSHOT_TZONE  = 0x08000069, // 设备时区(单位ms 东区为+ 西区为-)
    DEVICE_ID           = 0x0A000025, // 设备编号
    ROID_ID             = 0x0A000026, // 道路编号
    DIR_ID              = 0x0A000027, // 方向编号
    DIR_INFO            = 0x0A000028, // 方向信息
    PANORAMA_PIC_SIZE   = 0x07000073, // 全景图大小
    PLATE_PIC_SIZE      = 0x07000074, // 车牌图大小
    VLPR_ALG_TYPE       = 0x07000079, // 车牌算法类型
    REGULATION_CODE     = 0x0A000029, // 违章代码字符串
    LANE_DESC           = 0x070000B2, // 车道描述
    LANE_DIR_DESC       = 0x070000B3, // 车道方向描述
    CAR_DRV_DIR         = 0x070000B6, // 车辆行驶方向描述
    RADER_CAR_DIR       = 0x070000B7, // 雷达测速方向
    CUR_SNAP_INDEX      = 0x070000B8, // 当前抓拍序列号
    FACE_NUM            = 0x12000002, // 目标个数    
    PLATE_IDENTIFY_ID   = 0x0A00002A, // 抓拍流水号
    FACE_PED_POS        = 0x0B000065, // 行人闯红灯目标位置
        
	BLINKAGE_SNAP       = 0x01000005, // 联动抓拍功能使能
	BLINKAGE_SNAP_HOST_MACHINE = 0x01000006, // 联动抓拍抓拍主机
	BLINKAGE_SNAP_SLAVE_MACHINE = 0x01000007, // 联动抓拍抓拍从机
	IMG_SNAP_WIDTH      = 0x07000114, // 设置的抓拍图片宽
	IMG_SNAP_HEIGHT     = 0x07000115, // 设置的抓拍图片高
    
    LANE_NUMBER = 0x07000045, // 车道号(万集称重系统返回的车道号)
    WEIGH_ANALYSIS_ID = 0x07000046, //解析的ID (万集称重系统解析的ID)

    VEHICLE_SPEED       = 0x07000075,           // 车辆速度
    REGULATION_TYPE     = 0x07000076,           // 违章类型
    ITS_FLOWRATE_FEATURE = 0x07000077,          // its流量统计属性
    VEHICLE_MFR_TYPE     = 0x07000078,          // 机动车二次特征
    ITS_VEHICLE_FLOWRATE_FEATURE = 0x070000B5,  // its车流量统计属性

    ITS_TRAFFIC_STATE    = 0x070000B4, // 车道交通状态
    
    CARDETECTION_POS    = 0x0B000015, // 停车位置

    VEHICLE_BODY_RECT   = 0x0B000008, // 车身位置
    NOMOTOR_BODY_RECT   = 0x0B000009, // 非机动车车身位置

	PICTURE_TYPE        = 0x0600003a, // 图片类型

	METADATATYPE        = 0X0700009F, // 图片类型(行为分析下目标整体FTP)   智能内部使用 
	FTPPICTYPEDIVID     = 0X07000010, // human ride vhd(机非人区分)
    CHANNEL_ID          = 0x09000078, // 相机通道号 智能内部使用
	
    CHANNEL_ID_EX          = 0x09000092, // 相机通道号,，对外，用于区分元数据归属

	HOTMAP_WIDTH        = 0x05000001, // 热度图宽
	HOTMAP_HEIGHT       = 0x05000002, // 热度图高
	HOTMAP_ACCUM_IMG    = 0x05000003, // 热度图

	PIC_SEND_NUM        = 0x09000080, // 抠图发送序号

    FACE_CAP_FEATURE    = 0x0A000020,   // 目标抓拍特征值

	VOICE_PROMPT        =  0x0A000079,      // 音频提示 
    FACEPIC_UUID        =  0x0A00007A,      // 图片UUID 
    ID_CARDMD5          = 0x0A00007B,       // 身份证MD5 
    VISITOR_TYPE        = 0x0200007C,       // 访客类型 0 : 社区居民 1:访客 
    SNAPFACENUM         = 0x07000103,       // 当前相机抓拍人数统计
    TOTALSNAPNUM        = 0x07000104,       // 整个服务抓拍人数 
    SNAP_MATCHRATE_MILLION = 0x07000105,    // 发送给元数据网关的匹配率，6位有效数字
	
	SYS_LANGUAGE_TYPE   = 0x07000515,// 后台系统语言类型  
	
	MSL_AUTO_CALIBRATION_POINT = 0x0C000037, // 枪球联动自动标定点
	
    PIC_SNAPSHOT_DSTOFFSET = 0x08000085,     //夏令时偏移时间(s)

    COMM_LABEL_ADD_TYPE = 0x0A00007C,       // ADD第三方数据
    COMM_LABEL_DEL_TYPE = 0x0A00007D,       // delete第三方数据

    FACE_FEATURE_VAL        = 0x0A000030,       // 目标特征，智能内部使用
    
    COUNTRY_CODE_CHAR = 0x0A000080, // 车牌国家码字符
    STATE_CODE_CHAR      = 0x0A000081, // 车牌省份码字符
    ARH_COUNTRY_CODE_CHAR = 0x0A000082, // ARH车牌国家码字符
    ARH_STATE_CODE_CHAR      = 0x0A000083, // ARH车牌省份码字符
    GBT_COUNTRY_CODE_CHAR = 0x0A000086, // GBT2659-2000世界各国和地区名称代码

    HOTMAP_IMG = 0x0A000084, // 热度图二进制序列
    
    CLOSEUP_PIC = 0x0A00006B,           // 对象特写图 所有的非全景图 包含抠图 拼图

    ALG_TYPE = 0x20000001,              // 算法分类
    META_NAME = 0x20000002,             // 元数据名
    PRODUCER_NAME = 0x20000003,         // 数据生成者名字，即APP名

    DESCRIBE_INFO = 0x20000004,         // 象描述信息

    SDC_UUID = 0x22000001,              // 摄像机UUID
    OBJ_ATTR = 0x21000001,              // 属性信息，表示对象的扩展属性,属性对规则 0X21

    PIC_ATTR = 0x21000002,              // 图片的扩展属性信息,属性对规则 0X21

    COMMON_ALARM_TYPE = 0x07000041,     // 通用告警类型
    ALARM_NAME      = 0x20000005,       // 告警名称     
    ALARM_SOURCE    = 0x20000006,       // 告警源
    PANORAMA_ID     = 0X0900000A,       // 背景图ID
    CLIP_VIDEO  = 0x0A0000A0, // 短视频
    SCENE_ID             = 0x07000099 //场景ID
} LAYER_THREE_TYPE_E;

#define METATYPE_MASK LAYER_THREE_TYPE::RULE_MASK 

//智能内部元数据抓图使用
typedef enum ITGT_LAYER_THREE_TYPE_E {
   SNAP_TYPE_FTP        = 0x06000033,
   REGULA_PIC_QTY       = 0x04000015,   // 一组违章的图片总数
   REGULA_PIC_ORDER     = 0x04000016,   // 当前违章的图片序号
   SNAP_OBJ_ENDTIME     = 0x09000002,   // 抓拍违章最后时刻
   SNAP_ASSOCIATERECORD = 0x01000001,   // 抓拍是否关联录像使能
} ITGT_LAYER_THREE_TYPE_E;

typedef enum _PLATE_SNAPSHOT_TYPE_E {
    MANUAL_TRIGGER = 0,
    AUTO_TRIGGER,
    PLATE_SNAPSHOT_TYPE_MAX
} PLATE_SNAPSHOT_TYPE_E;

typedef enum _RULE_TYPE_E {
    TRIPWIRE_RULE = 0,
    WANDER_RULE,
    ABANDON_RULE,
    REMOVE_RULE,
    INVASION_RULE,
    ENTER_RULE,
    EXIT_RULE,
    FASTMOVE_RULE,
    CARDETECTION_RULE,
    HUMANCOUNT_RULE,
    CROWDDENSITY_DETECT_RULE,
    QUEUE_DETECT_RULE,
    IBALL_DETECT_RULE,
    MSL_AUTO_CALIB_RULE,
    MSL_AUTO_CALIB_RULE_CLEAR,
    FIGHTING_RULE,
    CLIMBING_RULE,
    FALL_DOWN_RULE,
    RUNNING_RULE,
    FIRE_DETECT_RULE,
	CALIB_RULE_RULE,
	
    RULE_TYPE_MAX
} RULE_TYPE_E;

// 元数据类型掩码
enum META_TYPE_MASK {
    META_RECT = 0x00000001,         // 框数据   000....0001
    META_PIC  = 0x00000002,         // 图数据   000....0010
    META_KEEPALIVE = 0x00000008,    // 保活数据   000....1000

    META_MAX
};

// 矩形
typedef struct _META_RECT_S {
    UINT16 usX;      // 矩形左上顶点的x坐标
    UINT16 usY;      // 矩形左上顶点的y坐标
    UINT16 usWidth;  // 矩形宽
    UINT16 usHeight; // 矩形高
} META_RECT_S;

// 点
typedef struct _META_POINT_S {
    UINT16 usX; // x
    UINT16 usY; // y
} META_POINT_S;

// 多边形
typedef struct _META_POLYGON_S {
    UINT32 uPointNum;         // 点个数
    META_POINT_S astPts[MAX_POINT_NUM]; // 
} META_POLYGON_S;

// 颜色
typedef struct _META_COLOR_S {
    UCHAR auc_r[3];
    UCHAR auc_g[3];
    UCHAR auc_b[3];
    UCHAR auc_ConfLev[3]; // 置信度
    UCHAR auc_ColorID[3]; // ID
} META_COLOR_S;

#endif /* __HW_APP_METADATA_H__ */
